/**
 * @file Utils.h
 * @brief Utils模块主头文件，包含所有Utils模块的头文件
 * @author CloudLinker
 * @date 2023-06-14
 */

#pragma once

#include <memory>
#include <mutex>
#include "../CLink_Export.h"
/**
 * @namespace CLink
 * @brief CloudLinker项目的顶级命名空间
 */
namespace CLink
{

/**
 * @namespace CLink::Utils
 * @brief 包含各种实用工具类的命名空间
 *
 * Utils命名空间提供了各种实用工具类，包括：
 * - JwtUtils: JWT令牌的生成、验证和解析
 * - ResponseUtils: 生成标准格式的HTTP JSON响应
 * - ThreadPool: 处理并发任务的线程池
 */
namespace Utils
{

/**
 * @class EnableSingleton
 * @brief 单例模式的基类模板，类似于 std::enable_shared_from_this
 * @tparam T 派生类类型
 *
 * @details
 * 这个模板类提供了一种安全、线程安全的方式来实现单例模式。
 * 使用方式类似于 std::enable_shared_from_this，通过继承方式获得单例功能。
 *
 * 使用示例：
 * @code
 * class MyClass : public EnableSingleton<MyClass> {
 *     // 允许基类访问私有构造函数
 *     friend class EnableSingleton<MyClass>;
 * private:
 *     MyClass() = default; // 私有构造函数
 * public:
 *     void DoSomething() { ... }
 * };
 *
 * // 使用单例
 * auto instance = MyClass::GetInstance();
 * instance->DoSomething();
 * @endcode
 */
//template <typename T>
//class CLINK_CLASS EnableSingleton
//{
//protected:
//    EnableSingleton() = default;
//    EnableSingleton(const EnableSingleton &) = delete;
//    EnableSingleton &operator=(const EnableSingleton &) = delete;
//    virtual ~EnableSingleton() = default;
//
//public:
//    /**
//     * @brief 获取单例实例
//     * @return std::shared_ptr<T> 指向单例实例的智能指针
//     * @details 线程安全的单例实例获取方法，使用双重检查锁定模式
//     */
//    static T* GetInstance()
//    {
//        static T shared;
//        return &shared;
//    }
//};

} // namespace Utils
} // namespace CLink